home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / opengl / sharedbox / globjwin.cpp.z / globjwin.cpp
C/C++ Source or Header  |  2002-04-08  |  4KB  |  101 lines

  1. /****************************************************************************
  2. ** $Id:  qt/globjwin.cpp   3.0.3   edited Oct 12 12:18 $
  3. **
  4. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  5. **
  6. ** This file is part of an example program for Qt.  This example
  7. ** program may be used, distributed and modified without limitation.
  8. **
  9. *****************************************************************************/
  10.  
  11. #include <qpushbutton.h>
  12. #include <qslider.h>
  13. #include <qlayout.h>
  14. #include <qframe.h>
  15. #include <qmenubar.h>
  16. #include <qpopupmenu.h>
  17. #include <qapplication.h>
  18. #include <qkeycode.h>
  19. #include "globjwin.h"
  20. #include "glbox.h"
  21.  
  22.  
  23. GLObjectWindow::GLObjectWindow( QWidget* parent, const char* name )
  24.     : QWidget( parent, name )
  25. {
  26.     // Create a menu
  27.     QPopupMenu *file = new QPopupMenu( this );
  28.     file->insertItem( "Delete Left QGLWidget", this, 
  29.               SLOT(deleteFirstWidget()) );
  30.     file->insertItem( "Exit",  qApp, SLOT(quit()), CTRL+Key_Q );
  31.  
  32.     // Create a menu bar
  33.     QMenuBar *m = new QMenuBar( this );
  34.     m->setSeparator( QMenuBar::InWindowsStyle );
  35.     m->insertItem("&File", file );
  36.  
  37.     // Create nice frames to put around the OpenGL widgets
  38.     QFrame* f1 = new QFrame( this, "frame1" );
  39.     f1->setFrameStyle( QFrame::Sunken | QFrame::Panel );
  40.     f1->setLineWidth( 2 );
  41.     QFrame* f2 = new QFrame( this, "frame2" );
  42.     f2->setFrameStyle( QFrame::Sunken | QFrame::Panel );
  43.     f2->setLineWidth( 2 );
  44.  
  45.     // Create an OpenGL widget
  46.     c1 = new GLBox( f1, "glbox1" );
  47.     
  48.     // Create another OpenGL widget that shares display lists with the first
  49.     c2 = new GLBox( f2, "glbox2", c1 );
  50.  
  51.     // Create the three sliders; one for each rotation axis
  52.     // Make them spin the boxes, but not in synch
  53.     QSlider* x = new QSlider ( 0, 360, 60, 0, QSlider::Vertical, this, "xsl" );
  54.     x->setTickmarks( QSlider::Left );
  55.     connect( x, SIGNAL(valueChanged(int)), c1, SLOT(setXRotation(int)) );
  56.     connect( x, SIGNAL(valueChanged(int)), c2, SLOT(setZRotation(int)) );
  57.  
  58.     QSlider* y = new QSlider ( 0, 360, 60, 0, QSlider::Vertical, this, "ysl" );
  59.     y->setTickmarks( QSlider::Left );
  60.     connect( y, SIGNAL(valueChanged(int)), c1, SLOT(setYRotation(int)) );
  61.     connect( y, SIGNAL(valueChanged(int)), c2, SLOT(setXRotation(int)) );
  62.  
  63.     QSlider* z = new QSlider ( 0, 360, 60, 0, QSlider::Vertical, this, "zsl" );
  64.     z->setTickmarks( QSlider::Left );
  65.     connect( z, SIGNAL(valueChanged(int)), c1, SLOT(setZRotation(int)) );
  66.     connect( z, SIGNAL(valueChanged(int)), c2, SLOT(setYRotation(int)) );
  67.  
  68.  
  69.     // Now that we have all the widgets, put them into a nice layout
  70.  
  71.     // Put the sliders on top of each other
  72.     QVBoxLayout* vlayout = new QVBoxLayout( 20, "vlayout");
  73.     vlayout->addWidget( x );
  74.     vlayout->addWidget( y );
  75.     vlayout->addWidget( z );
  76.  
  77.     // Put the GL widgets inside the frames
  78.     QHBoxLayout* flayout1 = new QHBoxLayout( f1, 2, 2, "flayout1");
  79.     flayout1->addWidget( c1, 1 );
  80.     QHBoxLayout* flayout2 = new QHBoxLayout( f2, 2, 2, "flayout2");
  81.     flayout2->addWidget( c2, 1 );
  82.  
  83.     // Top level layout, puts the sliders to the left of the frame/GL widget
  84.     QHBoxLayout* hlayout = new QHBoxLayout( this, 20, 20, "hlayout");
  85.     hlayout->setMenuBar( m );
  86.     hlayout->addLayout( vlayout );
  87.     hlayout->addWidget( f1, 1 );
  88.     hlayout->addWidget( f2, 1 );
  89.  
  90. }
  91.  
  92.  
  93. void GLObjectWindow::deleteFirstWidget()
  94. {
  95.     // Delete only c1; c2 will keep working and use the shared display list
  96.     if ( c1 ) {
  97.     delete c1;
  98.     c1 = 0;
  99.     }
  100. }
  101.